home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / developm / source / rkeyboar.cpt / Reactive Keyboard ƒ / Init.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-08-29  |  5.6 KB  |  250 lines

  1. #include <MacIncludes.h>
  2.  
  3. #include "Rk.h"
  4. #include "Structs.h"
  5. #include "file+rk.h"
  6.  
  7. extern     SysEnvRec    gMac;                
  8. extern    WindowPtr    gText,gPredict;
  9. extern    Boolean        gHasWaitNextEvent;    /* set up by Initialize */
  10. extern    Boolean        gHaveAUX;
  11. extern    Boolean        gInBackground;        /* maintained by Initialize and DoEvent */
  12. extern    short        gLogFileRef;
  13. /*    extern  MenuHandle    gHMenus[]; */
  14. extern    Rect        gTermTEDest,gTermTEView;
  15. extern    TEHandle    gTermTE;
  16. extern    FontInfo     gFInfo,gNormFInfo;
  17. extern    short        gSpecialFont;
  18. extern    Rect        gHiliteRect;
  19. extern    ControlHandle gPredScroll;
  20. extern    GrafPort     goffScreen;
  21. extern    THPrint        gPrinterRecord;
  22. extern    PrefHandle    gPrefs,gOldPrefs,gStartPrefs;
  23. extern  char         *prime_file, *zero_freq_file;
  24. extern  char        output_string[1024], temp_str[1024];
  25. extern  int         output_string_length;
  26. extern  int            num_buffers;
  27. extern    Boolean     gNewFile;
  28. extern  Str255        gFileName;
  29.  
  30. extern  Ptr            gExtraMems;
  31. extern    Boolean     gChanged;
  32.  
  33. extern  pascal void InitOffscreen();
  34.  
  35.  
  36. extern  void FileSystemError(Str255 FileName,Str255 doing, OSErr err, Boolean fatal);
  37.  
  38. Boolean TrapAvailable( short tNumber, TrapType tType );
  39.  
  40. #pragma segment Init
  41. Init()
  42. {
  43. #pragma unused (err,LogFileName)
  44.     Handle         menuBar;
  45.     Str255         LogFileName;
  46.     OSErr        err;
  47.     EventRecord event;
  48.     short        count;
  49.     acurHandle     acur;
  50.     short       *flagptr;
  51.     AppFile        FinderFile;
  52.     short            FinderMsg, FinderCount;
  53.     int         x;
  54.     short        thefile;
  55.     Ptr        TEText;
  56.     int        size;
  57.  
  58.  
  59.     gHasWaitNextEvent = TrapAvailable(_WaitNextEvent, ToolTrap);
  60.     gInBackground = false;
  61.     
  62.     InitGraf((Ptr) &qd.thePort);
  63.     InitFonts();    
  64.     FlushEvents( everyEvent, 0 );
  65.     InitWindows();
  66.     InitMenus();
  67.     TEInit();
  68.     InitDialogs(nil);
  69.     InitCursor();
  70.     SetUpMemory();
  71.     
  72.     for (count = 1; count <= 3; count++)
  73.     GetNextEvent(everyEvent, &event);
  74.  
  75.     SysEnvirons(kSysEnvironsVersion, &gMac);
  76.     
  77.     /* Make sure that the machine has at least 128K ROMs. If it doesn't, exit. */
  78.     
  79.     if (gMac.machineType < 0) AlertUser();
  80.     flagptr = (short *) HWCfgFlags;
  81.     if (*flagptr & (1 << 9))
  82.           gHaveAUX = 1;            /* Do Have A/UX */
  83.     else
  84.         gHaveAUX = 0;            /* Don't have A/UX */
  85.  
  86.  
  87.     menuBar = GetNewMBar(rMenuBar);            /* read menus into menu bar */
  88.     if ( menuBar == nil ) AlertUser();
  89.     SetMenuBar(menuBar);                    /* install menus */
  90.     DisposHandle(menuBar);
  91.     AddResMenu(GetMHandle(mApple), 'DRVR');    /* add DA names to Apple menu */
  92.  
  93.     DrawMenuBar();
  94.  
  95.     InitOffscreen();
  96.  
  97.     GetPrefs();
  98.     
  99.     acur=(acurHandle)GetResource('acur',0);
  100.     InitCursorCtl(acur);
  101.     Show_Cursor(ARROW_CURSOR);
  102.     init_reactive();
  103.  
  104.     gPrinterRecord = (THPrint)NewHandle(sizeof(TPrint)); 
  105.     if (gPrinterRecord){
  106.         PrOpen();
  107.         PrintDefault( gPrinterRecord ); 
  108.         PrClose();
  109.     }
  110.     CouldAlert(rLowMems);
  111.     gExtraMems = NewPtr(100000);
  112.     CountAppFiles(&FinderMsg,&FinderCount);
  113.     if(FinderCount==0)
  114.         DoNew();
  115.     else{
  116.         switch (FinderMsg){
  117.         case appOpen:
  118.             GetAppFiles(1,&FinderFile);
  119.             if(FinderFile.fType != 'TEXT'){
  120.                 DoNew();
  121.                 break;
  122.             }
  123.             err=FSOpen(FinderFile.fName,FinderFile.vRefNum,&thefile);
  124.             if(err){
  125.                 FileSystemError(FinderFile.fName,"\popen",err,false);
  126.                 return;
  127.             }
  128.             err=GetEOF(thefile,&size);
  129.             if(err){
  130.                 FileSystemError(FinderFile.fName,"\pfind size of",err,false);
  131.                 return;
  132.             }
  133.             if(size>kMaxTELength){
  134.                 AlertUser(eExceedChar);
  135.                 FSClose(thefile);
  136.                 return;
  137.             }
  138.             TEText=NewPtr(size);
  139.             if(TEText==nil){
  140.                 AlertUser(eNoMemory);
  141.                 FSClose(thefile);
  142.                 return;
  143.             }
  144.             DoNew();
  145.             if(gText){
  146.                 err=FSRead(thefile,&size,TEText);
  147.                 if(err){
  148.                     FileSystemError(FinderFile.fName,"\pfind size of",err,false);
  149.                     return;
  150.                 }
  151.                 TESetText(TEText,size,((DocumentPeek)gText)->docTE);
  152.             }
  153.             DisposPtr(TEText);
  154.             err=FSClose(thefile);
  155.             if(err){
  156.                 FileSystemError(FinderFile.fName,"\pfind size of",err,false);
  157.                 return;
  158.             }
  159.             TESetSelect(0,0,((DocumentPeek)gText)->docTE);
  160.             AdjustScrollbars(gText,false);
  161.             SetWTitle(gText,FinderFile.fName);
  162.             gNewFile=false;
  163.             for(x=0;x<=FinderFile.fName[0];x++)
  164.                 gFileName[x]=FinderFile.fName[x];
  165.             gChanged = false;
  166.             ClrAppFiles(1);
  167.             break;
  168.         case appPrint:
  169.             PrOpen();
  170.             if(PrError() == noErr)
  171.                 PrStlDialog(gPrinterRecord);
  172.             else ExitToShell();
  173.             PrClose();
  174.             
  175.             for(x=1;x<=FinderCount;x++){
  176.                 GetAppFiles(x,&FinderFile);
  177.                 if(FinderFile.fType != 'TEXT') continue;
  178.                 err=FSOpen(FinderFile.fName,FinderFile.vRefNum,&thefile);
  179.                 if(err){
  180.                     FileSystemError(FinderFile.fName,"\popen",err,false);
  181.                     return;
  182.                 }
  183.                 err=GetEOF(thefile,&size);
  184.                 if(err){
  185.                     FileSystemError(FinderFile.fName,"\pfind size of",err,false);
  186.                     return;
  187.                 }
  188.                 if(size>kMaxTELength){
  189.                     AlertUser(eExceedChar);
  190.                     FSClose(thefile);
  191.                     return;
  192.                 }
  193.                 TEText=NewPtr(size);
  194.                 if(TEText==nil){
  195.                     AlertUser(eNoMemory);
  196.                     FSClose(thefile);
  197.                     return;
  198.                 }
  199.                 DoNew();
  200.                 if(gText){
  201.                     err=FSRead(thefile,&size,TEText);
  202.                     if(err){
  203.                         FileSystemError(FinderFile.fName,"\pfind size of",err,false);
  204.                         return;
  205.                     }
  206.                     TESetText(TEText,size,((DocumentPeek)gText)->docTE);
  207.                 }
  208.                 DisposPtr(TEText);
  209.                 err=FSClose(thefile);
  210.                 if(err){
  211.                     FileSystemError(FinderFile.fName,"\pfind size of",err,false);
  212.                     return;
  213.                 }
  214.                 SetWTitle(gText,FinderFile.fName);
  215.                 PrintText(((DocumentPeek)gText)->docTE);
  216.                 DoCloseWindow(gPredict);
  217.                 ClrAppFiles(x);
  218.             }
  219.             ExitToShell();
  220.             break;
  221.         }
  222.     }
  223. }
  224.  
  225. #pragma segment Init
  226. Boolean TrapAvailable(tNumber,tType)
  227.     short        tNumber;
  228.     TrapType    tType;
  229. {
  230.     /* Check and see if the trap exists. On 64K ROM machines, tType will be ignored. */
  231.  
  232.     return NGetTrapAddress(tNumber, tType) != GetTrapAddress(_Unimplemented);
  233. } /*TrapAvailable*/
  234.  
  235.  
  236.  
  237. #pragma segment Init
  238. set_up_buffers()
  239. {
  240. }
  241.  
  242. /* Used whenever a, like, fully fatal error happens */
  243. #pragma segment Init
  244. void BigBadError(error)
  245.     short error;
  246. {
  247.     AlertUser(error);
  248.     ExitToShell();
  249. }
  250.